package cliente;

import junit.framework.TestCase;
import pessoa.Documento;
import pessoa.DocumentoPF;
import pessoa.Endereco;
import pessoa.Telefone;
import exception.ClienteExistenteException;
import exception.ClienteInexistenteException;
import exception.FuncionarioExistenteException;

public class TesteRepositorioClienteMap extends TestCase {

	RepositorioClientesMap repositorio;
	String documentoExistente;
	Cliente cliente, clienteInexistente;

	@Override
	protected void setUp() throws Exception {
		repositorio = new RepositorioClientesMap();

		Endereco end = new Endereco();
		Telefone tel = new Telefone(123, 234, 456);
		Documento doc = new DocumentoPF("cpf", "rg");

		cliente = new Cliente("11.2.87", end, "Fernando", tel, 3, doc);

		Documento docu = new DocumentoPF("123", "074");
		clienteInexistente = new Cliente("10.2", end, "Ricardo", tel, 5, docu);

		repositorio.inserir(cliente);

	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	public void testInserir() {
		// invocar metodo a ser testado
		try {
			repositorio.inserir(clienteInexistente);
		} catch (ClienteExistenteException e) {
			fail();
		}

		assertTrue(repositorio.existe(clienteInexistente.getDocumento()));
	}

	public void testAtualizar() throws ClienteInexistenteException {
		cliente.setNome("maria atualizada");
		try {
			repositorio.atualizar(cliente);
		} catch (ClienteInexistenteException e) {
			fail();
		}
		Documento doc = new DocumentoPF("cpf", "rg");
		Cliente teste = repositorio.procurar(doc);
		assertEquals("maria atualizada", teste.getNome());
	}

	public void testInserirDuasVezes() {
		// configurando

		try {
			repositorio.inserir(cliente);

		} catch (ClienteExistenteException e) {
			fail();
		}
	}

	public void testProcurar() {
		Documento doc = cliente.getDocumento();
		try {
			repositorio.procurar(doc);

		} catch (ClienteInexistenteException e) {
			fail();
		}
		assertTrue(repositorio.existe(doc));
	}

	public void testRemover() throws FuncionarioExistenteException {
		// invocar : remover
		Documento doc = cliente.getDocumento();
		try {

			repositorio.remover(doc);
		} catch (ClienteInexistenteException e) {
			fail();
		}
		// verificar
		assertFalse(repositorio.existe(doc));

	}

}
